package br.com.bomsabor.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.HashSet;
import java.util.Set;

import br.com.bomsabor.model.Conteudo;
import br.com.bomsabor.model.ItemProduto;
import br.com.bomsabor.model.Produto;

public class ImplConteudoDAO implements ConteudoDAO {
	
	public Conteudo inserir(Conteudo c) {
		String sql = "INSERT INTO ConteudoProduto (codProd, codItemProd, quantidade) " +
		"VALUES (?, ?, ?)";
		Connection con = GenericDAO.getConnection();
		
		try {
			PreparedStatement ps = con.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
			ps.setLong(1, c.getProduto().getCodProduto());
			ps.setLong(2, c.getItemProduto().getCodItemProduto());
			ps.setLong(3, c.getQuantidadeItem());
			ps.executeUpdate();
									
		} catch (SQLException e) {
			e.printStackTrace();
		}

		return c;
	}

	public void alterar(Conteudo c) {
		String sql = "UPDATE ConteudoProduto SET quantidade = ? " +
		"WHERE codProd = ? AND codItemProd = ? ";
		Connection con = GenericDAO.getConnection();
		PreparedStatement ps;
		try {
			ps = con.prepareStatement(sql);
		
			ps.setLong(1, c.getQuantidadeItem());
			ps.setLong(2, c.getProduto().getCodProduto());
			ps.setLong(3, c.getItemProduto().getCodItemProduto());
			ps.executeUpdate();
			
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

	public void excluir(Conteudo c) {
		String sql = "DELETE ConteudoProduto WHERE codProd = ? AND codItemProd = ? ";
		Connection con = GenericDAO.getConnection();
		try {
			PreparedStatement ps = con.prepareStatement(sql);
			ps.setLong(1, c.getProduto().getCodProduto());
			ps.setLong(2, c.getItemProduto().getCodItemProduto());
			ps.executeUpdate();
			
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

	@Override
	public Set<Conteudo> pesquisar(Produto p) {
		String sql = "SELECT * FROM ConteudoProduto WHERE codProd = ? ";
		Set<Conteudo> lista = new HashSet<Conteudo>();
		Connection con = GenericDAO.getConnection();
		try {
			PreparedStatement ps = con.prepareStatement(sql);
			ps.setLong(1, p.getCodProduto());
			ResultSet rs = ps.executeQuery();
			
			while(rs.next()){
				Conteudo c = new Conteudo();
				c.setProduto(p);

				ImplItemProdutoDAO iDAO = new ImplItemProdutoDAO();
				long codItemProduto = rs.getLong("codItemProd");
				ItemProduto ip = iDAO.pesquisar(codItemProduto);
				c.setItemProduto(ip);
				
				c.setQuantidadeItem(rs.getInt("quantidade"));
				lista.add(c);		
			}
			
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
		return lista;
	}

}
